新增完四個學生資料後,今天和大家介紹如何設定Admin管理介面中的資料顯示方式(篩選、搜尋、排序)以及資料庫的新增、修改和刪除。
若想要顯示多個欄位則必須定義ModelAdmin類別,以list_display定義顯示的資料欄位。
id為系統自動產生的欄位,它的值每次會遞增1。
<admin.py>
class studentAdmin(admin.ModelAdmin):
list_display=('id','cName','cSex','cBirthday','cEmail','cPhone','cAddr')
admin.site.register(student,studentAdmin)
呈現結果:
上述為選取顯示欄位,接下來介紹如何篩選、搜尋、排序:
<admin.py>
class studentAdmin(admin.ModelAdmin):
list_display=('id','cName','cSex','cBirthday','cEmail','cPhone','cAddr')
list_filter=('cName','cSex')
search_fields=('cName',)
ordering=('id',)
呈現結果:
使用models模組中的objects.get()和使用models模組中的objects.all()方法可以讀取資料。
objects.get()方法可取得一筆資料,查詢成功將回傳一筆資料,若回傳多筆或資料不存在會產生錯誤,所以通常以try/expect檢視是否有誤。
基本語法:
資料表.objects.get(查詢條件)
這裡以「cName="李曉玫"」進行查詢練習,於templates資料夾中新增<listone.html>設定顯示的網頁模板。
<view.py>
from test4api.models import student
def listone(request):
try:
unit = student.objects.get(cName="李曉玫") #讀取一筆資料
except:
errormessage = " (讀取錯誤!)"
return render(request, "listone.html", locals())
<listone.html>
<!DOCTYPE html>
<html>
<head>
<title>顯示一筆資料</title>
</head>
<body>
<h2>顯示 student 資料表一筆資料{{errormessage}}</h2>
編號:{{ unit.id }} <br />
姓名:{{ unit.cName }} <br />
性別:{{ unit.cSex }} <br />
生日:{{ unit.cBirthday}} <br />
郵件帳號:{{unit.cEmail }} <br />
電話:{{ unit.cPhone }} <br />
地址:{{ unit.cAddr}} <br />
</body>
</html>
objects.all()方法可取得所有資料,也可以將資料「order_by("欄位名稱")」依指定欄位進行資料排序,若加上負號(-)為遞減排序。
基本語法:
資料表.objects.get()
這裡以「order_by('id')」進行查詢與排序練習,跟上述一樣須新增<listall.html>設定顯示的網頁模板。
<view.py>
def listall(request):
students = student.objects.all().order_by('id')
return render(request, "listall.html", locals())
<listall.html>
<!DOCTYPE html>
<html>
<head>
<title>顯示所有資料</title>
</head>
<body>
<h2>顯示 student 資料表所有資料</h2>
<table border="1" cellpadding="0" cellspacing="0">
<th>編號</th><th>姓名</th><th>性別</th><th>生日</th>
<th>郵件帳號</th><th>電話</th><th>地址</th>
{% for student in students %}
<tr>
<td>{{ student.id }} </td>
<td>{{ student.cName }} </td>
<td>{{ student.cSex}} </td>
<td>{{ student.cBirthday }} </td>
<td>{{ student.cEmail }} </td>
<td>{{ student.cPhone}} </td>
<td>{{ student.cAddr }} </td>
</tr>
{% endfor %}
</table>
</body>
</html>
首先在<urls.py>中加入資料管理的連結
<urls.py>
urlpatterns = [
......
re_path(r'^insert/$', views.insert), #新增資料
re_path(r'^modify/$', views.modify), #修改資料
re_path(r'^delete/$', views.delete), #刪除資料
]
objects.create()方法可新增資料,基本語法:
紀錄變數 = 資料表.objects.create(欄位1=值1,...)
這邊練習將紀錄變數設為unit,日期格式需為「yyyy-mm-dd」,並以id欄位遞減
<view.py>
def insert(request): #新增資料
cName = '林三和'
cSex = 'M'
cBirthday = '1987-12-26'
cEmail = 'miwamail@gmail.com'
cPhone = '0963245612'
cAddr = '新北市蘆洲區中正路243巷19號'
unit = student.objects.create(cName=cName, cSex=cSex, cBirthday=cBirthday, cEmail=cEmail,cPhone=cPhone, cAddr=cAddr)
unit.save() #寫入資料庫
students = student.objects.all().order_by('-id')
return render(request, "listall.html", locals())
修改資料須先取得要修改的資料,「條件」格式通常「欄位名稱=值」
基本語法:
紀錄變數 = 資料表.objects.get(條件)
練習為修改cBirthday、cAddr的資料
練習程式
def modify(request): #修改資料
unit = student.objects.get(cName='林三和')
unit.cBirthday = '1987-12-11'
unit.cAddr = '新北市蘆洲區中正路185巷63號'
unit.save() #寫入資料庫
students = student.objects.all().order_by('-id')
return render(request, "listall.html", locals())
刪除資料與修改資料相同須先取得要刪除的資料,再使用delete方法刪除資料
基本語法:
紀錄變數 = delete()
練習為修改cBirthday、cAddr的資料
練習程式
def delete(request,id=None): #刪除資料
unit = student.objects.get(id=5)
unit.delete()
students = student.objects.all().order_by('-id')
return render(request, "listall.html", locals())
Django資料庫介紹到個段落啦,接下來和大家分享更進階的內容~